﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Content;

namespace Projeto
{
    class TelaJogoModoReflexo : Tela
    {

        private Texture2D texture; // Imagem de fundo da cena
        private MouseState estadoMouseAnterior; // Último botão pressionado
        SpriteFont fonte;

        private MouseState estadoMouseAtual;
        //private MouseState estadoMouseAnterior; // Último botão pressionado

        public Baralho baralhoJogo;
        int pontos;
        int contadorTempo;
        bool pause = false;


        public TelaJogoModoReflexo(Jogo jogo)
            : base(jogo)
        {
            this.jogo = jogo; // Recebe o sprite batch do jogo via serviços do XNA
            this.spriteBatch = (SpriteBatch)jogo.Services.GetService(typeof(SpriteBatch));

            // Carrega a imagem do jogo
            this.texture = jogo.Content.Load<Texture2D>("Cartas/background_grass");

            // Carrega fonte do título do jogo
            this.fonte = jogo.Content.Load<SpriteFont>("Fonts/gameFont");

            // Recebe o estado do mouse
            this.estadoMouseAnterior = Mouse.GetState();


            // Recebe o estado do mouse
            this.estadoMouseAnterior = Mouse.GetState();

            // Inicializo Baralho;
            this.baralhoJogo = new Baralho(jogo.Content, jogo.Window);
        }

        public override void Update(Microsoft.Xna.Framework.GameTime tempoJogo)
        {
            // Declara uma novo estado do mouse e recebe este estado
            estadoMouseAtual = Mouse.GetState();
            KeyboardState teclado;
            teclado = Keyboard.GetState();

           
            if (teclado.IsKeyDown(Keys.Space) &&
                !teclado.IsKeyDown(Keys.Space))
            {
                pause = !pause;
            }

            if (!pause)
            {
                //foreach (Carta carta in baralhoJogo.cartas)
                for(int i = 0; i < baralhoJogo.cartas.Count; i++)
                {
                    Carta carta = baralhoJogo.cartas[i];
                    carta.JogoReflexo(tempoJogo, jogo.Window, estadoMouseAtual, estadoMouseAnterior, contadorTempo, baralhoJogo, ref pontos);

                    if (carta.clidado)
                    {
                        baralhoJogo.cartas.Remove(carta);
                    }
                }
                
                contadorTempo++;

            }

            // Verifica se foi pressionado o botão ESQUERDO
            if (teclado.IsKeyDown(Keys.Back))
            {
                // Troca de Cena (tela do jogo)
                jogo.gerenciadorTelas.MudaTela(EstadoJogo.Intro);
            }

            if ((baralhoJogo.cartas.Count <= 0) || (contadorTempo == 1000))
            {
                // Acabou....
                jogo.gerenciadorTelas.MudaTela(EstadoJogo.Creditos);
            }
            
            // Guarda o estado passado do mouse
            this.estadoMouseAnterior = estadoMouseAtual;

            base.Update(tempoJogo);
        }

        public override void Draw(GameTime tempoJogo)
        {
            // Desenha a tela de fundo
            spriteBatch.Draw(texture, Vector2.Zero, Color.White);


            // Colocar as cartas em movimento e clicaveis...
            foreach (Carta carta in baralhoJogo.cartas)
            {
                //carta.visivel = true;
                carta.Draw(spriteBatch); // aqui ele chama o draw da classe
            }


            spriteBatch.DrawString(fonte, "Pontos: " + pontos + " Tempo atual: " + contadorTempo + "\n\n Pressione Backspace para sair.",
                Vector2.Zero, Color.White);


            base.Draw(tempoJogo);
        }
    }
}
